<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
   <script>
    let data={
        a:null,
        b:undefined,
        c:function(){
            console.log('123213');
            return '123'
        },
        information:{
        name:"小王",
        age:27,
        hieght:"172cm"
      },
      likeColor:["red","green","black","yellow"],
    }
    function deepClon(obj){
        let clonedata=Array.isArray(obj)?[]:{}
        for(let i in obj){
            if(typeof obj[i]=="object"){
                clonedata[i]=deepClon(obj[i])
            }else{
                clonedata[i]=obj[i]
            }
        }
        return clonedata
    }
    // let obj =deepClon(data)
    // obj.information.name="objname"
    // console.log(20,data);
    // console.log(37,obj);
    // obj.c()

    // console.log("1");
    // setTimeout(()=>{
    //     console.log("2");
    //     Promise.resolve().then(()=>{
    //         console.log('3');
    //     })
    // },0)
    // new Promise(function(resolve,reject){
    //     console.log("4");
    //     resolve("6")
    //     setTimeout(()=>{
    //         console.log("5");
         
    //     },0)
    // }).then((res)=>{
    //     console.log("7");
    //     setTimeout(()=>{
    //         console.log(res);
    //     })
    // })
//   1 4 2 3 5 7 6



// console.log(1)
// // 宏任务
// setTimeout(() => {
//     console.log(2)
// })
// // 微任务
// Promise.resolve().then(() => {
//     console.log(3)
// })
// console.log(4)

// 1 4 3 2


// async function async1() {
//   console.log("1"); // 2
//   await async2(); // 先执行 async2() , 进入 async2 函数内
//   // await 后的代码都是微任务，将其放入微任务队列 --- 微任务 1
//   console.log("2"); // 6
// }

// // 定义函数，先跳过
// async function async2() {
//   console.log("3"); // 3
// }

// // 同步任务
// console.log("4"); // 1

// // 宏任务 1
// setTimeout(function () {
//   console.log("5"); // 8
// }, 0);

// // 同步任务
// async1(); // 进入 async1 函数内

// // 同步任务 -- Promise 函数体内的代码会立刻执行
// new Promise(function (resolve) {
//   console.log("6"); // 4
//   resolve(); // Promise 状态变为 resolved , 立即触发了 then 函数
// }).then(function () {
//   // then 函数是个微任务，将其放入微任务队列 --- 微任务 2
//   console.log("7"); // 7
// });

// // 同步任务
// console.log("8"); // 5

// // 同步任务执行完毕，开始执行微任务
// // 依次执行微任务1 和 微任务 2
// // 最后执行宏任务
// // 4 1 3 6 8 2 7 5



// console.log('1')
// setTimeout(() => {
//     console.log('2')
//     Promise.resolve().then(() => {
//         console.log('3')
//     })
// })
// Promise.resolve().then(() => {
//     console.log('4')
//     setTimeout(() => { console.log('5')})
// })
// console.log('6')

// //1 6 4 2 3 5


console.log('1');
 
setTimeout(function() {
  console.log('2');
}, 0);
 
Promise.resolve().then(function() {
  console.log('3');
}).then(function() {
  console.log('4');
});
 
console.log('5')
   </script>
</body>
</html>